/*
* Copyright (c) 2016 ShopJsp. All Rights Reserved.
 * ============================================================================
 * 版权所有 2011 - 今 北京华宇盈通科技有限公司，并保留所有权利。
 * ----------------------------------------------------------------------------
 * 提示：在未取得SHOPJSP商业授权之前，您不能将本软件应用于商业用途，否则SHOPJSP将保留追究的权力。
 * ----------------------------------------------------------------------------
 * 官方网站：http://www.shopjsp.com
 * ============================================================================
*/
package com.hyyt.shopjsp.util.common;


import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;

import org.apache.log4j.Logger;

/**
 * 快递查询
 * 
 * @author 
 * @version 2013-9-12
 * @see KuaiDi
 * @since
 */
public class Kuaidi100
{
    /**
     * 日志
     */
    private Logger log = Logger.getLogger(Kuaidi100.class);

    /**
     * 快递查询接口方法
     * 
     * @param key
     *            ：商家用户key值，在http://www.kuaidi100.com/openapi申请的
     * @param com
     *            ：快递公司代码，在http://www.kuaidi100.com/openapi网上的技术文档里可以查询到
     * @param nu
     *            ：快递单号，请勿带特殊符号，不支持中文（大小写不敏感）
     * @return 快递100返回的url，然后放入页面iframe标签的src即可
     * @see
     */
    public String searchkuaiDiInfo(String key, String com, String nu)
    {
        String content = "";
        InputStream urlStream = null;
        try{
            URL url = new URL("http://www.kuaidi100.com/applyurl?key=" + key + "&com=" + com + "&nu=" + nu);
            URLConnection con = url.openConnection();
            con.setAllowUserInteraction(false);
            byte b[] = new byte[10000];
            urlStream = url.openStream();
			int numRead = urlStream.read(b);
            content = new String(b, 0, numRead);
            while (numRead != -1) {
                numRead = urlStream.read(b);
                if (numRead != -1)
                {
                    // String newContent = new String(b, 0, numRead);
                    String newContent = new String(b, 0, numRead, "UTF-8");
                    content += newContent;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
            log.error("快递查询错误");
        } finally {
			//关闭IO流
	        if(Utils.objectIsNotEmpty(urlStream)){
				try {
					urlStream.close();
				} catch (IOException e) {
					urlStream = null;
					e.printStackTrace();
				}
			}
		}
        return content;
    }

    public String jsonKuaiDi(String key, String com, String nu){
    	String content = "";
    	InputStream urlStream = null;
    	try {
    	/*	show 返回类型： 
    		0：返回json字符串， 
    		1：返回xml对象， 
    		2：返回html对象， 
    		3：返回text文本。 
    		如果不填，默认返回json字符串。
    		muti 返回信息数量： 
			1:返回多行完整的信息， 
			0:只返回一行信息。 
			不填默认返回多行。
    		*/
			URL url= new URL("http://api.kuaidi100.com/api?id="+key+"&com="+com+"&nu="+nu+"&show=0&muti=1&order=desc");
			URLConnection con=url.openConnection();
			 con.setAllowUserInteraction(false);
			   urlStream = url.openStream();
			   String type = URLConnection.guessContentTypeFromStream(urlStream);
			   String charSet=null;
			   if (type == null)
			    type = con.getContentType();

			   if (type == null || type.trim().length() == 0 || type.trim().indexOf("text/html") < 0)
			    return null;

			   if(type.indexOf("charset=") > 0)
			    charSet = type.substring(type.indexOf("charset=") + 8);

			   byte b[] = new byte[10000];
			   int numRead = urlStream.read(b);
			   content = new String(b, 0, numRead);
			   while (numRead != -1) {
			    numRead = urlStream.read(b);
			    if (numRead != -1) {
			     //String newContent = new String(b, 0, numRead);
			     String newContent = new String(b, 0, numRead, charSet);
			     content += newContent;
			    }
			   }
			   //System.out.println("content:" + content);
		} catch (MalformedURLException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			//关闭IO流
	        if(Utils.objectIsNotEmpty(urlStream)){
				try {
					urlStream.close();
				} catch (IOException e) {
					urlStream = null;
					e.printStackTrace();
				}
			}
		}
    	return content;
    	/*
    	返回结果
    	com	物流公司编号
    	nu	物流单号
    	time	每条跟踪信息的时间
    	context	每条跟综信息的描述
    	state	快递单当前的状态 ：　 
    	0：在途，即货物处于运输过程中；
    	1：揽件，货物已由快递公司揽收并且产生了第一条跟踪信息；
    	2：疑难，货物寄送过程出了问题；
    	3：签收，收件人已签收；
    	4：退签，即货物由于用户拒签、超区等原因退回，而且发件人已经签收；
    	5：派件，即快递正在进行同城派件；
    	6：退回，货物正处于退回发件人的途中；
    	该状态还在不断完善中，若您有更多的参数需求，欢迎发邮件至 kuaidi@kingdee.com 提出。
    	status	查询结果状态： 
    	0：物流单暂无结果， 
    	1：查询成功， 
    	2：接口出现异常，*/
    }
}